// 闭包(closure)
// 闭包是一个函数以及其捆绑的周边环境状态的引用的组合
// 在 JavaScript 中，闭包会随着函数的创建而被同时创建。

function makeFunc() {
    var id = 1001;
    var name = "afang";
    var age = 18;
    function displayName() {
        console.log(id, name, age);
    }
    return displayName;
}

var myFunc = makeFunc();
myFunc();

console.log( '- '.repeat(10) );

function count() {
    let counter = 5;
    let inner = function(){
        if( counter > 0 ) {
            console.log(`counter: ${counter}`);
            counter--;
        }
    }
    return inner;
}

let decrease = count();
decrease();
decrease();
decrease();
decrease();
decrease();
decrease();

// 参考文档:
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures